<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 原型链 ：对象在访问属性或者方法的时候的一种查找规则；

        // function Person(name){
        //     this.name = name;
        // }
        // Person.prototype.fn = function(){
        //     console.log("fn");
        // }

        // let obj = new Person("张三");
        // // 一个对象 会有2部分构成  1. 自身的属性和方法 2. 原型的属性和方法

        // console.log(obj);

        // 原型链 是和原型有关系 ，是因为原型 又是一个对象 ： 1. 自身的属性和方法 2. 原型的属性和方法
        // console.log(typeof  Person.prototype)
        // 最终 所有的对象是不是都是 Object 内置构造函数 生成的 
        // new Object();
        // 最终都会找到 Object的 原型上 ；
       //    console.log( Object.prototype.__proto__);
       // 这样原型的查找过程 就形成了一个链式结构


        // 对象里属性或者方法查找规则 ：会先在自身查找属性和方法 ，如果没有会继续在原型里找属性和方法
        // 如果还没有继续会在原型的原型里找 ，如果最终在原型链上都没找到 就返还undefined

        // function Person(){
        //     // this.age = 20;
        // }
        // // Person.prototype.age = 20;
        // // Object.prototype.age = 20;
        // let zhangsan = new Person();
        // console.log(zhangsan.age);

        // 注意： 对象的属性和方法 赋值 不会赋值到原型链  
        // 赋值是 给哪个对象赋值 就在哪个对象上；
        // let obj  ={};
        // obj.age = 20;
        // obj.__proto__  //也不会赋值到 这 
        // Object.prototype  //不会赋值到这里的
    </script>
</body>
</html>